const fs = require('fs');

const momentService = require('../service/moment.service');
const fileService = require('../service/file.service');
const {
    PICTURE_PATH
} = require('../app/file-path');

class MomentController {
    async create(ctx, next) {

        try {
            ctx.user.id;
            const content = ctx.request.body.content;
            const result = await momentService.createService(content, userId);
            ctx.body = result;
        } catch (err) {
            ctx.body = 'moment.controller.js文件中的create方法中出现了错误';
        }
    };


    async detail(ctx, next) {
        try {
            const conmentId = ctx.params.conmentId;
            const result = await momentService.getMomentById(conmentId);
            result.length == 0 ? ctx.body = '没有查询到此数据' : ctx.body = result; //使用三目运算符进行判断，如果有数据则返回数据，没有则返回提示语句
        } catch (error) {
            console.log(error)
        }
    };

    async list(ctx, next) {
        try {
            const {
                offset,
                size
            } = ctx.query;
            const result = await momentService.getMomentList(offset, size);
            ctx.body = result;
            // console.log(result);
        } catch (error) {
            console.log(error);
        }
    };

    async update(ctx, next) {
        try {
            const {
                momentId
            } = ctx.params;
            // console.log(momentId);
            const {
                content
            } = ctx.request.body;
            // console.log(content);
            const result = await momentService.updateData(content, momentId)

            ctx.body = '修改动态成功'; //这里我没有返回查询返回的默认值，返回了自己的语句 

        } catch (error) {
            console.log(error);
        }
    };

    async deleteDate(ctx, next) {
        try {
            const {
                momentId
            } = ctx.params;
            const result = await momentService.removeData(momentId);

            ctx.body = '删除数据成功'; //这里我没有返回查询返回的默认值，返回了自己的语句

        } catch (error) {
            console.log(error);
        }
    }

    async addLabels (ctx, next) {
        try { 
            const {labels} = ctx;  //因为在上一个中间件中我们在ctx中添加了labels属性，所以我们直接可以也通过对象结构拿到，但是我打
            // console.log(labels);             //印了ctx发现里面没有lables属性，我也不知道为什么，可能手动添加的属性不显示吧
            // console.log(ctx);
            // console.log(labels);    //[ { name: '全栈', id: 2 }, { name: '爱情', id: 3 }, { name: '友情', id: 4 } ]
            const {momentId} = ctx.params;
            // console.log(momentId);   //1

            //添加所有标签
            for (let label of labels){
                //判断标签是否已经和动态有关系   
            const isExist = await momentService.hasLabel(momentId, label.id);
            if (!isExist) {
                await momentService.addLabel(momentId, label.id);
            }
            ctx.body = '为动态添加标签成功';
            }     
        } catch (err) {
            console.log(err);
        }
    }

    

     //动态的配图服务
    async fileInfo(ctx, next) {
       try {
        let { filename } = ctx.params;  //因为下面会对filename进行赋值，所以不能用const,需要用let
        const fileInfo = await fileService.getFileByFilename(filename);
        const { type } = ctx.query;
        const types = ["small", "middle", "large"];
        if (types.some(item => item === type)) {
          filename = filename + '-' + type;
        }

        ctx.response.set('content-type', fileInfo.mimetype);
        ctx.body = fs.createReadStream(`${PICTURE_PATH}/${filename}`);
       } catch (err) {
           console.log(err);
       }
    }
}

module.exports = new MomentController();